package poo.agendina;

import java.io.*;

import java.util.Iterator;
import java.util.StringTokenizer;

import poo.util.*;

public class AgendinaVector implements Agendina {

	private Vector<Nominativo> tabella;

	@SuppressWarnings({ "rawtypes", "unchecked" })
	public AgendinaVector(int capacita) {
		if (capacita <= 0)
			throw new IllegalArgumentException();
		tabella = new ArrayVector(capacita);
	}

	public AgendinaVector() {
		this(50);
	}

	@Override
	public int size() {
		return tabella.size();
	}

	@Override
	public void svuota() {
		tabella.clear();
	}

	@Override
	public void aggiungi(Nominativo n) {
		int i = Array.ricercaBinaria(tabella, n);
		if (i != -1)
			tabella.set(i, n);
		else {
			int j = 0;
			boolean flag = false;
			while (j < tabella.size() && !flag) {
				Nominativo x = tabella.get(j);
				if (x.compareTo(n) > 0)
					flag = true;
				else
					j++;
			}
			tabella.add(j, n);
		}

	}

	@Override
	public void rimuovi(Nominativo n) {
		int i = Array.ricercaBinaria(tabella, n);
		if (i != -1)
			tabella.remove(i);
	}

	@Override
	public Nominativo cerca(Nominativo n) {
		int i = Array.ricercaBinaria(tabella, n);
		if (i != -1)
			return tabella.get(i);
		return null;
	}

	@Override
	public Nominativo cerca(String prefisso, String telefono) {
		for (int j = 0; j < tabella.size(); j++) {
			Nominativo x = tabella.get(j);
			if (x.getPrefisso().equals(prefisso)
					&& x.getTelefono().equals(telefono))
				return x;
		}
		return null;
	}

	public String toString() {
		StringBuilder sb = new StringBuilder(500);
		for (int i = 0; i < tabella.size(); i++) {
			sb.append(tabella.get(i));
			sb.append('\n');
		}
		return sb.toString();
	}

	@Override
	public void salva(String nomeFile) throws IOException {
		PrintWriter pw = new PrintWriter(new FileWriter(nomeFile));
		for (int i = 0; i < tabella.size(); i++)
			pw.println(tabella.get(i));
		pw.close();
	}

	@Override
	public void ripristina(String nomeFile) throws IOException {
		BufferedReader br = new BufferedReader(new FileReader(nomeFile));
		tabella.clear();
		for (;;) {
			String linea = br.readLine();
			if (linea == null)
				break;
			StringTokenizer st = new StringTokenizer(linea, " -");
			String cog = st.nextToken();
			String nom = st.nextToken();
			String pre = st.nextToken();
			String tel = st.nextToken();
			aggiungi(new Nominativo(cog, nom, pre, tel));
		}
		br.close();
	}

	@Override
	public Iterator<Nominativo> iterator() {
		return tabella.iterator();
	}
}